import { createApp } from 'vue'
import App from './App.vue'
import { setupRouter } from './router'
import { setupStore } from './stores'
import { setupElementPlus } from './plugins/element-plus'
import { setupMock } from './mock/index'
import logger, { initGlobalErrorHandling, initPerformanceMonitoring } from './utils/logger'

// 创建Vue应用实例
const app = createApp(App)

// 初始化函数
async function initApp() {
  try {
    // 1. 设置全局错误处理
    initGlobalErrorHandling()
    
    // 2. 初始化性能监控（生产环境）
    await initPerformanceMonitoring()
    
    // 3. 设置Mock数据（开发环境）
    if (import.meta.env.VITE_MOCK_ENABLE === 'true') {
      setupMock()
      logger.info('Mock数据服务已启动')
    }
    
    // 4. 设置状态管理
    setupStore(app)
    logger.debug('Pinia状态管理已初始化')
    
    // 4.1. 初始化用户状态
    const { useUserStore } = await import('./stores/user')
    const userStore = useUserStore()
    userStore.init()
    logger.debug('用户状态已初始化')
    
    // 4.2. 初始化系统状态
    const { useSystemStore } = await import('./stores/system')
    const systemStore = useSystemStore()
    systemStore.updateDeviceType()
    logger.debug('系统状态已初始化')
    
    // 5. 设置路由
    await setupRouter(app)
    logger.debug('Vue Router已初始化')
    
    // 6. 设置Element Plus组件库
    setupElementPlus(app)
    logger.debug('Element Plus已初始化')
    
    // 8. 挂载应用
    app.mount('#app')
    
    // 9. 隐藏加载屏幕
    setTimeout(() => {
      document.body.classList.add('app-ready')
    }, 500)
    
    logger.info('🚀 CRM旅游管理系统启动成功', {
      mode: import.meta.env.MODE,
      version: '3.0.0',
      framework: 'Vue 3 + Element Plus'
    })
    
  } catch (error) {
    logger.error('应用初始化失败:', error)
    
    // 显示错误信息
    const errorMsg = document.createElement('div')
    errorMsg.innerHTML = `
      <div style="
        position: fixed;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background: white;
        padding: 32px;
        border-radius: 12px;
        box-shadow: 0 8px 32px rgba(0,0,0,0.1);
        text-align: center;
        max-width: 400px;
        z-index: 10000;
      ">
        <h3 style="color: #FF3B30; margin: 0 0 16px 0;">系统初始化失败</h3>
        <p style="color: #666; margin: 0 0 16px 0;">请刷新页面重试，或联系技术支持</p>
        <button onclick="window.location.reload()" style="
          background: #007AFF;
          color: white;
          border: none;
          padding: 8px 16px;
          border-radius: 6px;
          cursor: pointer;
        ">刷新页面</button>
      </div>
    `
    document.body.appendChild(errorMsg)
  }
}

// 启动应用
initApp()